#!/usr/bin/env python3
# learn_python.py: 学习 Python 编程的综合脚本

import os
import sys
import datetime
import argparse
from time import sleep
import requests
from threading import Thread

# =========================
# 1. 脚本基础功能
# =========================

# 获取脚本所在目录和名称
SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__))
SCRIPT_NAME = os.path.basename(__file__)

print(f"脚本所在目录: {SCRIPT_DIR}")
print(f"脚本名称: {SCRIPT_NAME}")

# =========================
# 2. 命令行参数解析
# =========================

def parse_args():
    """解析命令行参数"""
    parser = argparse.ArgumentParser(description="Python 编程学习脚本")
    parser.add_argument("-n", "--name", help="输入你的名字", required=False)
    parser.add_argument("-v", "--version", action="version", version="learn_python.py 1.0")
    return parser.parse_args()

args = parse_args()
if args.name:
    print(f"你好, {args.name}!")
else:
    print("你可以使用 -n 参数输入你的名字")

# =========================
# 3. 日期与时间操作
# =========================

current_time = datetime.datetime.now()
print(f"当前日期和时间: {current_time}")
print(f"时间戳: {current_time.timestamp()}")

# =========================
# 4. 文件与目录操作
# =========================

# 检查文件是否存在并创建
file_name = "example.txt"
if os.path.exists(file_name):
    print(f"文件 {file_name} 已存在")
else:
    print(f"文件 {file_name} 不存在，正在创建...")
    with open(file_name, "w") as f:
        f.write("这是一个示例文件\n")

# 列出当前目录的所有文件
print("当前目录的文件:")
for file in os.listdir("."):
    print(f"  - {file}")

# =========================
# 5. 数据类型操作
# =========================

# 列表（数组）
my_list = ["apple", "banana", "cherry"]
print(f"\n列表内容: {my_list}")
print(f"列表第一个元素: {my_list[0]}")
my_list.append("date")
print(f"添加元素后的列表: {my_list}")

# 元组
my_tuple = ("Python", "Java", "C++")
print(f"\n元组内容: {my_tuple}")
print(f"元组第一个元素: {my_tuple[0]}")

# 字典
my_dict = {"name": "Alice", "age": 30, "city": "New York"}
print(f"\n字典内容: {my_dict}")
print(f"访问字典中的 'name': {my_dict['name']}")

# 集合
my_set = {1, 2, 3, 3, 4}
print(f"\n集合内容（自动去重）: {my_set}")

# =========================
# 6. 异常处理
# =========================

try:
    result = 10 / 0
except ZeroDivisionError as e:
    print(f"\n发生错误: {e}")

# =========================
# 7. 网络操作
# =========================

try:
    print("\n尝试获取 Google 首页内容:")
    response = requests.get("https://www.google.com")
    print(f"返回状态码: {response.status_code}")
except requests.RequestException as e:
    print(f"网络请求失败: {e}")

# =========================
# 8. 多线程示例
# =========================

def background_task(task_name, duration):
    """模拟后台任务"""
    print(f"开始任务 {task_name}...")
    sleep(duration)
    print(f"任务 {task_name} 完成!")

print("\n启动多线程任务:")
threads = [
    Thread(target=background_task, args=("任务1", 2)),
    Thread(target=background_task, args=("任务2", 3)),
]

for t in threads:
    t.start()

for t in threads:
    t.join()

# =========================
# 9. 动态菜单
# =========================

while True:
    print("\n菜单:")
    print("1. 显示当前日期时间")
    print("2. 列出当前目录文件")
    print("3. 退出")
    choice = input("请选择操作 (1/2/3): ")

    if choice == "1":
        print(f"当前日期时间: {datetime.datetime.now()}")
    elif choice == "2":
        print("当前目录的文件:")
        for file in os.listdir("."):
            print(f"  - {file}")
    elif choice == "3":
        print("退出程序")
        break
    else:
        print("无效选择，请重试")

# =========================
# 脚本结束
# =========================

print("\nPython 编程学习结束！")

